package org.csu.onlineedubackend.service;

import org.csu.onlineedubackend.entity.StudentCourseDanmaku;
import org.csu.onlineedubackend.entity.VideoStudentCourseProgress;

import java.util.List;

public interface StudentCourseVideoService {
    
    /**
     * 获取视频播放进度
     * @param studentId 学生ID
     * @param lessonId 课时ID
     * @return 视频播放进度对象
     */
    VideoStudentCourseProgress getVideoProgress(Integer studentId, Integer lessonId);
    
    /**
     * 更新视频播放进度
     * @param progress 视频播放进度对象
     * @return 是否更新成功
     */
    boolean updateVideoProgress(VideoStudentCourseProgress progress);
    
    /**
     * 标记视频为已完成
     * @param studentId 学生ID
     * @param lessonId 课时ID
     * @return 是否标记成功
     */
    boolean markVideoCompleted(Integer studentId, Integer lessonId);
    
    /**
     * 更新视频播放设置
     * @param studentId 学生ID
     * @param lessonId 课时ID
     * @param playbackRate 播放速度
     * @param qualitySetting 视频质量设置
     * @param subtitleEnabled 是否启用字幕
     * @return 是否更新成功
     */
    boolean updateVideoSettings(Integer studentId, Integer lessonId, 
                               Float playbackRate, String qualitySetting, Boolean subtitleEnabled);
    
    /**
     * 更新视频高级设置
     * @param studentId 学生ID
     * @param lessonId 课时ID
     * @param volume 音量
     * @param danmakuEnabled 是否启用弹幕
     * @param pipEnabled 是否启用画中画
     * @return 是否更新成功
     */
    boolean updateAdvancedSettings(Integer studentId, Integer lessonId, 
                                  Float volume, Boolean danmakuEnabled, Boolean pipEnabled);
    
    /**
     * 获取课时的所有弹幕
     * @param lessonId 课时ID
     * @return 弹幕列表
     */
    List<StudentCourseDanmaku> getDanmakusByLessonId(Integer lessonId);
    
    /**
     * 获取指定时间范围内的弹幕
     * @param lessonId 课时ID
     * @param startTime 开始时间（秒）
     * @param endTime 结束时间（秒）
     * @return 弹幕列表
     */
    List<StudentCourseDanmaku> getDanmakusByTimeRange(Integer lessonId, Integer startTime, Integer endTime);
    
    /**
     * 发送弹幕
     * @param danmaku 弹幕对象
     * @return 是否发送成功
     */
    boolean sendDanmaku(StudentCourseDanmaku danmaku);
}